package com.myKng.content.service;

import com.myKng.content.model.File;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Optional;

public interface FileService {
    
    /**
     * 上传文件
     * @param file 上传的文件
     * @param uploadedBy 上传者ID
     * @return 文件信息
     */
    File uploadFile(MultipartFile file, String uploadedBy);
    
    /**
     * 获取文件信息
     * @param fileId 文件ID
     * @return 文件信息
     */
    Optional<File> getFileById(String fileId);
    
    /**
     * 删除文件
     * @param fileId 文件ID
     */
    void deleteFile(String fileId);
    
    /**
     * 获取用户上传的文件列表
     * @param uploadedBy 上传者ID
     * @param pageable 分页参数
     * @return 文件分页列表
     */
    Page<File> getFilesByUser(String uploadedBy, Pageable pageable);
    
    /**
     * 根据文件类型获取文件列表
     * @param fileType 文件类型
     * @param pageable 分页参数
     * @return 文件分页列表
     */
    Page<File> getFilesByType(String fileType, Pageable pageable);
    
    /**
     * 根据文件名搜索文件
     * @param fileName 文件名关键词
     * @param pageable 分页参数
     * @return 文件分页列表
     */
    Page<File> searchFilesByName(String fileName, Pageable pageable);
    
    /**
     * 批量获取文件信息
     * @param fileIds 文件ID列表
     * @return 文件信息列表
     */
    List<File> getFilesByIds(List<String> fileIds);
    
    /**
     * 生成文件的临时预览URL
     * @param fileId 文件ID
     * @param expiryTime 过期时间（秒）
     * @return 临时访问URL
     */
    String generatePreviewUrl(String fileId, int expiryTime);
}